// $Id: array_fwd.hpp 2 2009-09-02 08:47:42Z joseph2002 $
/*
 * Copyright 2009 Joseph Wu
 * Distributed under the Boost Software License, Version 1.0.
 * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 *
 * For more information, see http://xpcomplus.sourceforge.net
 */

#ifndef XPCOM_ARRAY_FWD_HPP
#define XPCOM_ARRAY_FWD_HPP

#include <xpcom/config.hpp>
#include <xpcom/types.hpp>

#ifdef BOOST_HAS_ABI_HEADERS
#include BOOST_ABI_PREFIX
#endif

namespace xpcom {

template <typename T, typename Enable = void>
class array_traits;

template <typename T, typename Traits = array_traits<T> >
class array;

template <typename T>
class ptr_array_traits;

template <typename T, typename Traits = ptr_array_traits<T> >
class ptr_array;

#ifndef XPCOM_DISABLE_TYPEDEFS
typedef array<int8_t>   int8_array;
typedef array<int16_t>  int16_array;
typedef array<int32_t>  int32_array;
typedef array<int64_t>  int64_array;
typedef array<uint8_t>  uint8_array;
typedef array<uint16_t> uint16_array;
typedef array<uint32_t> uint32_array;
typedef array<uint64_t> uint64_array;
typedef array<float>    float_array;
typedef array<double>   double_array;
typedef array<char>     char_array;
typedef array<wchar>    wchar_array;
typedef array<void*>    void_array;
typedef array<bool>     bool_array;
typedef array<char*>    pstring_array;
typedef array<wchar*>   pwstring_array;
typedef array<uuid>     uuid_array;

typedef ptr_array<interface> interface_array;
#endif // XPCOM_DISABLE_TYPEDEFS

} // namespace xpcom

#ifdef BOOST_HAS_ABI_HEADERS
#include BOOST_ABI_SUFFIX
#endif

#endif // XPCOM_ARRAY_FWD_HPP
